DIY USB 电流表:元件选型和原理图绘制
USB 电流表在电子 DIY 中还是比较常用的,可以用它来观察目标设备的实时电流、电压以及功耗。
作为电子 DIY 爱好者,做一个自己的 USB 电流表也是一件顺理成章的事。这里把之前已经开源的一个 USB 电流表的原理图来添加一些详细说明,对于初学者来说可以大概搞明白一个简单设备的原理图该怎么画。
当然我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。
USB 电流表成品效果
电压、电流、功率、容量界面
功率历史图表界面
需求分析和元件选型
在最开始搞一个入门 DIY 的产品,还是不要搞太复杂,尽量从简单的开始,先确定一下需求范围,降低整体开发难度,一方面减少原理图绘制之类的工作量,另外一方面,也可以增加成功率,防止半路弃坑 🤣。
需求分析
作为一个 USB 电流表,主要功能就是电流、电压等指标的采集,以及作为现在已经普及度非常高的 USB Type-C 接口和 USB PD 充电都需要支持一下,然后再通过屏幕展示出来采集的数据就可以了。
因此根据需求大概确定以下功能点:
USB Type-C 输入与输出
PD 协议透传
支持 5~20V 电压检测
支持 0~5A 电流检测
支持功率计算、容量统计
支持功率历史图表显示
支持统计数据记录与清除
按键切换电压电流数据与功率历史图表
使用 12864 OLED 显示相关数据
MCU 选型
之前做一些 DIY 产品的时候,一直都使用的 ESP32 系列 MCU,但是对于 USB 电流表这样一个简单的产品,并且不准备加上 Wi-Fi 或蓝牙数据传输功能,因此就需要选择另外一款 MCU 产品。
在一个 DIY 群里聊天的时候看到有推荐 WCH 这款 RISC-V 的低功耗 MCU CH32V003,就是它了,尝试一下。
CH32V003 官网:https://www.wch.cn/products/CH32V003.html
CH32V003系列是基于青稞RISC-V2A内核设计的工业级通用微控制器,支持48MHz系统主频,具有宽压、单线调试、低功耗、超小封装等特点。CH32V003系列内置1组DMA控制器、1组10位模数转换ADC、1组运放比较器、多组定时器以及标准通讯接口USART、IIC、SPI等。
CH32V003 主要参数
青稞32位RISC-V2A处理器,支持2级中断嵌套
最高48MHz系统主频
2KB SRAM,16KB Flash
供电电压:3.3/5V
多种低功耗模式:睡眠、待机
上/下电复位、可编程电压监测器
1组1路通用DMA控制器
1组运放比较器
1组10位ADC
1个16位高级定时器和1个16位通用定时器
2个看门狗定时器和1个32位系统时基定时器
1个USART接口、1组IIC接口、1组SPI接口
18个I/O口,映像一个外部中断
64位芯片唯一ID
串行单线调试接口
封装形式:TSSOP20、QFN20、SOP16、SOP8
对于本项目来说,使用 12864 OLED 以及 INA219 需要 I2C 接口,按键需要使用普通 GPIO,UART 用于调试信息输出,SDIO 用于烧录,对比之后发现,TSSOP20 封装的 CH32V003F4P6 更适合,它相比使用 SOP8 封装的 CH32V003J4M6 拥有更多 GPIO,并且 UART 和 SDIO 也没有复用,可以更好地满足本项目的需求。
电压、电流采集选型
作为一个 USB 电流表,最重要的当然是电压、电流的检测,这个可以通过运放来完成,也可以直接选用现成的芯片,这里为了简单,直接选用现成的芯片,因为之前用过 TI 的 INA219,就直接选用这款了。
INA219 官网:https://www.ti.com.cn/product/cn/INA219
INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压,转换次数和滤波选项可通过编程设定。可编程校准值与内部乘法器相结合,支持直接读取电流值(单位:安培)。通过附加乘法寄存器可计算功率(单位:瓦)。I2C 或 SMBUS 兼容接口 具有 16 个可编程地址。
INA219 的电压最大量程为 26V,在 PD2.0 100W 中,最大 20V 是足够使用的,但是如果碰到支持 PD3.1 140W,使用 28V 供电时,就会超量程了。但是目前看支持 140W 的充电器和设备都比较少,暂时不纠结这个问题。后续可以考虑使用 INA226 来代替,它具备更高的量程。
DC-DC 芯片选型
因为本项目中的 USB 电流表需要支持 USB PD 并且会有最高 100W 的检测需求,在这时 USB 接口中的 VBUS 电压会最高到达 20V,而项目中使用的 CH32V003 和 INA219 并不支持在这样的高电压下工作,因此需要使用一款 DC-DC 芯片来将 VBUS 降压到 3.3V 供 MCU 以及 INA219 使用。
LGS5145:https://item.szlcsc.com/5718438.html
LGS5145 是一种带内部开关的降压 DC/DC 稳压器,具备SKIP 控制模式,将低静态电流与高开关频率相结合,可在广泛的负载电流范围内实现高效率。SKIP 模式使用短的“突发"周期通过内部功率 MOSFET 切换电感电流,然后是休眠周期,在休眠周期中,电源开关关闭,负载电流由输出电容器提供。在轻负载时,突发周期占总周期时间的一小部分,使平均电源电流最小化,大大提高了轻负载时的效率。
LGS5145 具有 4.5V~55V 的宽输入电压范围,从而最大限度地减少对外部浪涌抑制组件的需求。使其成为宽输入电源范围工业和高电池节数电池组应用的理想选择。LGS5145 具有集成式低阻值 0.6Ω 高侧功率 MOSFET ,可提供至少 0.6A 的输出电流能力,具有出色的负载和线路瞬态响应。
在立创商城搜索了一下之后,选择了这款体积比较小的 DC-DC 电源芯片,使用 SOT-23 封装,并且支持最高 40V 输入电压,可以应对 USB PD 最高 20V 输入电压的降压需求。
屏幕选型
作为一款简易 USB 电流表,直接用最常用的 12864 OLED 屏幕就足够用了,另外为了降低制作难度,这里直接用了现成的 OLED 屏幕模块,省去焊接屏幕以及它的一堆外围元件。
同时为了开发简单,复用开源项目中的 I2C 通信代码,这里也选用了四针 I2C 接口的 12864 OLED 屏幕模块。
元件小结
最终我们选定的元件如下:
MCU:WCH CH32V003F4P6
电压监测:TI INA219
DC-DC:LGS5145
屏幕:0.96 寸 12864 OLED 屏幕模块
原理图详解
USB Type-C 输入输出接口
为了保持电流表体积小巧,因此没有添加 USB Type-A 接口,输入输出均使用了 USB Type-C 接口。
并且因为需要支持 USB PD 供电,用电设备和充电器之前需要使用 CC1 或 CC2 配置线进行协商,因此 USB Type-C 母座均使用了使用了 16P 的版本。
两个母座的 VBUS 网络,一个使用的 VBUS,另外一个使用的是 VBUS_OUT,是因为这两个母座中间需要连接一个采样电阻,因此需要使用不一样的网络名称。
为了让用电设备和充电器之间可以正常进行 USB PD 协议协商,因此需要将输入输出的 CC1、CC2 引脚直接连通。
USB Type-C 的其它引脚在 PD 协议中并无实际使用场景,不过其他协议例如 QC 或 APPLE 2.4A 还是会用到 D+、D- 等引脚,因此为了保证兼容性,也将其他引脚都直接连接。
这样使用有两点需要注意:
因为 CC1、CC2 没有连接 5.1K 下拉电阻,因此在使用 C-C 线及 PD 充电头时,由于充电头无法协商 PD 协议,因此不会供电,电流表也无法启动。
因为 CC1、CC2 是直接连接,中间无 MUX 芯片,因此在两端充电线在接反的情况下,同样无法协商 PD 协议。
又因为两边的 USB Type-C 接头是直通的,因此其实不存在哪头用于输入哪头用于输出的情况,随便哪一边接充电器侧都可以。
DC-DC 降压供电
原理图直接根据 LGS5145 数据手册绘制,一般来说大部分芯片都会提供典型应用电路,按照数据手册中的说明来绘制原理图通常没有什么大问题。
图中 R5、R6、R7 为分压反馈电阻,从数据手册中 设定输出电压 一节可以看到分压电阻计算公式:
根据公式可以算出实际输出电压为 Vout = 0.812 * (40K / 10K) = 3.428V,高出一点点,在 MCU 和 INA219 的输入电压允许范围,问题也不大。选用这些阻值主要是因为手上有 10K 以及 20K,不想再买额外的电阻了,如果没有复用需求的话,可以直接按数据手册建议的购买电阻。
C6 为前馈补偿电容,通常是为了增加 DC-DC 输出电流变化时的响应速度,可以不加。
整个 DC-DC 最终输出网络为 V3.3。
另外,为了指示 DC-DC 是否正常工作,在 DC-DC 这部分也添加了一个 LED 指示电源工作状态,并使用 10K 的限流电阻。
MCU 原理图
CH32V003 这块,供电 3.3V,加上 100nF 去耦电容,I2C 总线加了 10K 上拉电阻。
网络用途和说明如下:
调试使用的 TXD、RXD
刷机使用的 NRST、SWDIO
按键检测 GPIO BTN1、BTN2
I2C 产品线 I2C_SDA、I2C_SCL,根据数据手册,CH32V003 使用 I2C 时,需要在 SCL、SDA 加上上拉电阻,这里使用了 10K 上拉电阻
SPI 总线 SPI_MISO、SPI_MOSI、SPI_SCK,不过本项目并未使用 SPI
INA219 电压电流测量
INA219 也不需要太多外围元件,只需要给供电添加一个去耦电容,并将 VIN+ 和 VIN- 连接到采样电阻两端即可。
A0 和 A1 用于决定 MCU 和 INA219 通信时使用的地址,这里都将它们接地,最终 INA219 将使用 0x40 作为 I2C 通信时的地址。
R2 为采样电阻,INA219 就是通过采集采样电阻两端电阻的差并结合欧姆定律来计算出实际通过电路中的电流。
另外这个 USB 电流表项目,为了能测量比较高的电压,并且避免较大的发热,这里使用 10mR 的采样电阻,这样即使在 100W 20V 5A 时,功耗也只有 0.25W,实测 100W 长时间运行也不发烫。
SDA 和 SCL 连接到网络 I2C_SDA 和 I2C_SCL,用于 MCU 和 INA219 通信。
屏幕及按键
这个 USB 电流表使用的 0.96 寸 12864 OLED 屏幕作为显示设备,为了制作方便直接用的成品模块,这里只需要放一个 4 针 2.54mm 排母就可以了,为了定位屏幕的位置,额外放了一个 12864 屏幕模块的符号,方便在 PCB 设计的时候确定排母位置。
这里只需要根据屏幕模块引脚顺序,确定到排母的网络符号就可以了。
另外还有两个按键,用于操作 USB 电流表的切换页面以及数据清零,这里采用低电平触发的方式,因此每个按键都使用了 10K 上拉电阻连接到 3.3V,然后按键的另一对引脚连接到 GND。
下载及调试接口
这里的 UART 接口用来调试使用,方便在编写代码时直接使用日志来输出当前变量值,这里只保留了 TXD、RXD、GND,没有放置 V3.3,因为 USB 电流表在使用时一般肯定会有外部供电。
下载接口使用了 CH32V003 定义的 SWDIO 和 NRST,使用 WCH Link-E 编程器即可对 CH32V003 进行刷写程序,和 UART 接口一样,如果已经连接了外部供电,在连接编程器的时候也可以只连接 GND 和 SWDIO。
小结
至此我们已经完成了这个 USB 电流表项目的所有原理图绘制,在立创 EDA 中使用 设计>更新/转换原理图到PCB 菜单就可以将原理图更新到 PCB 编辑器中,可以开始布线啦。
项目开源地址
本项目已经在立创开源平台发布,可以直接打开以下地址查看并且复刻。
https://oshwhub.com/wandaeda/ji-yu-ch32v003-de-usb-dian-liu-biao
点击阅读原文查看开源项目
↓↓↓↓↓↓